/**
 * dangling references(悬空引用)示例
 */
fn main() {
    let reference_to_nothing = dangle();
    println!("{}", reference_to_nothing);
}

/**
 * 1. 返回String，函数转移返回值的所有权，因此，函数返回值有效
 * 2. 返回&str，函数不转移引用类型返回值的所有权，因此，函数返回值无效
 */
fn dangle() -> String {
    let s = String::from("hello");
    s
    // 函数返回引用类型，不转移所有权，变量s所在的地址无效
    // &s // 返回字符串 s 的引用
} // 这里 s 离开作用域并被丢弃。其内存被释放。
